package cn.hinglo.gameclaw.admin.service;

import cn.hinglo.gameclaw.admin.dao.UserDao;
import cn.hinglo.gameclaw.data.entity.Result;
import cn.hinglo.gameclaw.data.utils.ResultUtils;
import cn.hutool.core.util.StrUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import static cn.hinglo.gameclaw.data.utils.FieldUtils.*;


/**
 * @createTime: 2018/1/2
 * @author: HingLo
 * @description: 用户管理的实体服务层
 */
@Service
@Slf4j
public class UserService {
    /**
     * 单次查询的最大条数为200条
     */
    private static final int MAX = 200;
    private final UserDao userDao;

    @Autowired
    public UserService(UserDao userDao) {
        this.userDao = userDao;
    }

    /**
     * 账号列表
     *
     * @param type  账号类型（微信与QQ）
     * @param start 开始位置
     * @param num   数量
     * @return 返回账号集合
     */
    public Result listUserService(int type, int start, int num) {
        //起始位置不能小于0,
        if (start < 0) {
            start = 0;
        }
        //单次查询的数据不能超过200条
        if (num < 1 || num > MAX) {
            num = 10;
        }
        //qq或者微信
        if (type == USER_QQ || type == USER_WEIXIN) {
            return ResultUtils.success(userDao.listUserDao(type, start, num));
        } else if (type == ADMIN) {
            return ResultUtils.success(userDao.listAdminDao(type));
        } else {
            return ResultUtils.error("传入的账号类型不正确");
        }

    }

    /**
     * 统计总数
     *
     * @param type 账号类型
     * @return 结果
     */
    public Result countUserService(Integer type) {
        if (type == USER_QQ || type == USER_WEIXIN || type == ADMIN) {
            return ResultUtils.success(userDao.countUserDao(type));
        } else {
            return ResultUtils.error("传入的账号类型不正确");
        }
    }

    /***
     * 通过指定的类型来查询用户信息
     * @param type 查询类型
     * @param value : 查询的参数
     * @return 查询结果
     */
    public Result findByIdOrUidUserService(Integer type, String value) {

        //默认通过Id查询
        int id = 0;
        //通过用户显示的Id来查询
        int uid = 1;
        //通过用户名来查询
        int name = 2;

        if (StrUtil.isNotBlank(value)) {
            if (type == id) {
                return ResultUtils.success(userDao.findByIdUserDao(value));
            } else if (type == uid) {
                return ResultUtils.success(userDao.findByUIdUserDao(value));
            } else if (type == name) {
                return ResultUtils.success(userDao.findByNameUserDao(value));
            } else {
                return ResultUtils.error("查询的类型不正确");
            }
        } else {
            return ResultUtils.error("查询Id不能为空");
        }
    }
}
